const { app, BrowserWindow } = require('electron');
const path = require('path');
const fs = require('fs');
const ffmpeg = require('fluent-ffmpeg');

// 工具类在IPC处理函数中导入使用

// 设置默认FFmpeg路径（项目内resources/ffmpeg目录）
let defaultFfmpegPath;
let defaultFfprobePath;
if (app.isPackaged) {
  // 打包后的路径
  defaultFfmpegPath = path.join(process.resourcesPath, 'ffmpeg', 'ffmpeg.exe');
  defaultFfprobePath = path.join(process.resourcesPath, 'ffmpeg', 'ffprobe.exe');
} else {
  // 开发环境路径
  defaultFfmpegPath = path.join(__dirname, 'resources', 'ffmpeg', 'ffmpeg.exe');
  defaultFfprobePath = path.join(__dirname, 'resources', 'ffmpeg', 'ffprobe.exe');
}

// 配置FFmpeg和FFprobe
if (fs.existsSync(defaultFfmpegPath)) {
  ffmpeg.setFfmpegPath(defaultFfmpegPath);
  console.log('Using FFmpeg at:', defaultFfmpegPath);

  // 配置ffprobe（如果存在）
  if (fs.existsSync(defaultFfprobePath)) {
    ffmpeg.setFfprobePath(defaultFfprobePath);
    console.log('Using FFprobe at:', defaultFfprobePath);
  } else {
    console.warn('FFprobe not found at:', defaultFfprobePath);
  }
} else {
  console.error('FFmpeg not found at:', defaultFfmpegPath);
}

let mainWindow; // 全局mainWindow变量

// 创建窗口函数
function createWindowFn() {
  mainWindow = new BrowserWindow({
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      contextIsolation: true,
      nodeIntegration: false
    },
    autoHideMenuBar: true // 隐藏菜单栏
  });

  // 最大化窗口，确保占满所有可用空间（不包括任务栏）
  mainWindow.maximize();

  // 根据环境决定加载方式
  const isDevelopment = !app.isPackaged;
  if (isDevelopment) {
    // 开发模式：加载Vue开发服务器
    mainWindow.loadURL('http://localhost:5173');
    // 打开开发者工具
    mainWindow.webContents.openDevTools();
  } else {
    // 生产模式：加载打包后的文件
    mainWindow.loadFile('dist-vue/index.html');
  }

  mainWindow.on('closed', () => {
    mainWindow = null;
  });
}

// 导入统一的IPC处理函数管理器
const { registerAllIpcHandlers } = require('./ipc-handlers/index');

// 应用就绪事件
app.whenReady().then(() => {
  createWindowFn();
  registerAllIpcHandlers(defaultFfmpegPath, mainWindow);
});

// 所有窗口关闭事件
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

// 激活事件
app.on('activate', () => {
  if (BrowserWindow.getAllWindows().length === 0) {
    createWindowFn();
  }
});
